//
//  第一章 起步.swift
//  Documentation
//
//  Created by Toj on 10/13/23.
//

第一章 起步

1 关于版本控制
版本控制系统: VCS

1.1 本地版本控制系统
补丁控制系统: rcs(revition control systems)

1.2 集中化的版本控制系统
cvcs(centralized version control systems)

1.3 分布式版本控制系统
dvcs(Distributed Version Control System)
例如: GIT, 还有其他不介绍. 主要不用

2 Git 的历史
Linus(林纳斯) 为了解决linux集群开发而诞生的, 当初BitKeeper收回了免费特权.
开发了一套自己的分布式版本控制系统, 固git诞生了
开发目标:
• 速度快
• 简单
• 对非线性开发模式的强力支持(允许上千个并行开发的分支)
• 完全分布式
• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

3 Git 基础要点(或者说是特性)
3.1 直接快照, 而非比较差异
把变化的文件作快照后, 记录在微型文件系统中, 而不是记录全部

3.2 近乎所有操作都可本地执行
所有的代码都存在本地;
脱离网络限制: 在没有网的时候也可以提交, 待到有网在推送远端服务器上.

3.3 时刻保持数据完整性
每个开发人员的代码都是服务器最完整的源, 无需考虑是否差异丢失现象
每次提交都会生成一个SHA-1算法的哈希值作为存储映射(24b9da6552252987aa493b52f8696cd6d3b00373), 而不是文件名
** Git 的工作完全依赖于这类哈希值

3.4 多数操作仅添加数据
常用的 Git 操作大多仅仅是把数据添加到数据库
在 Git 里, 一旦提交快照之后就完全不用担心丢失数据, 所以要经常添加提交操作保证数据的安全性

3.5 三种状态
• 已修改(modified)
已修改表示修改了某个文件, 但还没有提交保存
• 已暂存(staged)
已暂存表示把已修改的文件放在下次提交时要保存 的清单中
对应的命令: git add 文件名
• 已提交 (committed)
已提交表示该文件已经被安全地保存在本地数据 库中了
对应的命令: git commit -m 'log'

由此我们看到 Git 管理项目时, 文件流转的三个工作区域: Git 的本地数据目录, 工作目录以及暂存区 域.
每个项目都有一个 git 目录, 它是 Git 用来保存元数据和对象数据库的地方.
该目录非常重要, 每次克隆 镜像仓库的时候, 实际拷贝的就是这个目录里面的数据.
git 工作流程:
1. 在工作目录中修改某些文件
2. 对这些修改了的文件作快照, 并保存到暂存区域
3. 提交更新, 将保存在暂存区域的文件快照转储到 git 目录中

4 安装git(只记录mac上安装过程)
4.1 mac上安装
•. google 有个安装工具: http://code.google.com/p/git-osx-installer
•. 通过 MacPorts安装:
NOTE: 已经装有Mac Ports
- sudo port install git-core +svn +doc +bash_completion +gitweb
•. 安装xcode 就会帮你安装一些插件, 顺带git

5 配置git参数
通过 git config命令配置参数
命令后面带的参数 【作用域】
【作用域】:
--system: 系统级别
--global: 全局级别
--local:  当前git仓库

5.1 查看参数列表
默认作用域是 --global 可以省略
git config --global --list
查看具体某个参数信息 默认本git仓库
git config --local user.name

5.2 修改用户信息
修改全局用户信息
git config --global user.name "name"
git config --global user.email "123@qq.com"


5.3 查看所有的配置以及它们所在的文件:
git config --list --show-origin

5.4 添加git全局配置(HTTPS代理)
git config --global https.proxy http://10.0.60.252:808

5.5删除git全局配置
git config --unset --global https.proxy

5.6 配置GIT第三方编辑器
git config --global core.editor D:/Notepad++/notepad++.ex

5.7 差异分析工具
git config --global merge.tool vimdiff

5.7 config文件内容
不同作用域文件不同
system: File地址: 修改后会在当前git仓库内 ~/.git/config文件内 ***是个隐藏文件
global: File地址: ~/.gitconfig文件 ***是个隐藏文件
local:  File地址: /etc/gitconfig文件 ***是个隐藏文件

[user]
    name = Toj
    email = tojemail@163.com
[core]
    excludesfile = /Users/vipcode/.gitignore_global
    editor = /usr/bin/vim
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path =
[mergetool "sourcetree"]
    cmd = /Users/vipcode/Applications/Sourcetree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[filter "lfs"]
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true
    clean = git-lfs clean -- %f

6 帮助
git help
